import requests
import re

member_url = "https://www.yaozh.com/member/"
login_url = "https://www.yaozh.com/login/"

header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
}



print(re.findall('a.*b','avsdfbsfdsbvfdsb'))
print(re.findall('a.*?b','avsdfbsfdsbvfdsb'))



# ----------------匹配模式--------------------

# 1,之前学过的字符串的常用操作：一对一匹配
# s1 = 'fdskahf太白金星'
# print(s1.find('太白'))  # 7

# 2，正则匹配：

# 单个字符匹配
import re
# \w：匹配字母（包含中文）或数字或下划线 与 \W：匹配非字母（包含中文）或数字或下划线
# print(re.findall('\w', '太白jx 12*() _'))  # ['太', '白', 'j', 'x', '1', '2', '_']
# print(re.findall('\W', '太白jx 12*() _'))  # [' ', '*', '(', ')', ' ']
# print(re.findall('\w','太白jx 12*() _'))
# print(re.findall('\W','太白jx 12*() _'))


# \s：匹配任意的空白符 与\S：匹配任意非空白符
# print(re.findall('\s','太白barry*(_ \t \n'))  # [' ', '\t', ' ', '\n']
# print(re.findall('\S','太白barry*(_ \t \n'))  # ['太', '白', 'b', 'a', 'r', 'r', 'y', '*', '(', '_']
# print(re.findall('\s','太白barry*(_ \t \n'))
# print(re.findall('\S','太白barry*(_ \t \n'))


# \d：匹配数字 与 \D：匹配非数字
# print(re.findall('\d','1234567890 alex *（_'))  # ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
# print(re.findall('\D','1234567890 alex *（_'))  # [' ', 'a', 'l', 'e', 'x', ' ', '*', '（', '_']
# print(re.findall('\d','1234567890 alex *（_'))
# print(re.findall('\D','1234567890 alex *（_'))


# \A：从字符串开头匹配 与 ^：匹配字符串的开始
# print(re.findall('\Ahel','hello 太白金星 -_- 666'))  # ['hel']
# print(re.findall('^hel','hello 太白金星 -_- 666'))  # ['hel']
# print(re.findall('\Ahello','hello 太白金星 -_- 666'))
# print(re.findall('^h','hello 太白金星 -_- 666'))


# \Z:结尾开始匹配
# $ ：结尾开始匹配
# print(re.findall('金星\Z','fbksbvks金星'))
# # print(re.findall('金星\z','fbksbvks金星'))
# print(re.findall('金星$','fbksbvks金星'))


# \n 与 \t
# print(re.findall('\n','hello \n 太白金星 \t*-_-*\t \n666'))  # ['\n', '\n']
# print(re.findall('\t','hello \n 太白金星 \t*-_-*\t \n666'))  # ['\t', '\t']


#元字符匹配
#. ？ * + {m:n} .* .*?


# . 匹配任意一个字符，除了换行符（re.DOTALL 这个参数可以匹配\n）。
#1.如果匹配成功光标则移到匹配成功的最后的字符
#2.如果匹配未成功光标则向下移动一位再依次匹配
# print(re.findall('a.b','ab a)b a1b a牛b aaaab  abbb')) #['a)b', 'a1b', 'a牛b', 'aab', 'abb']
# print(re.findall('a.b','aabbb'))  #  ['aab']
# print(re.findall('a.b','aaabb'))  #  ['aab']


#？匹配0个或者1个由左边字符定义的片段.
# 如果匹配未成功光标则向下移动一位再依次匹配
# print(re.findall('a?b', 'ab aab'))   #['ab', 'ab']
# print(re.findall('a?b', 'sb ab aabb'))  #['ab', 'ab', 'b']


# * 匹配0个或者多个左边字符表达式。 满足贪婪匹配
# 如果匹配未成功光标则向下移动一位再依次匹配
# print(re.findall('a*b', 'ab aab aaab abbb'))
# print(re.findall('a*b','aaab ab b')) #['aaab', 'ab', 'b']
# print(re.findall('a*b','aasab ab b')) #['ab', 'ab', 'b']


# + 匹配1个或者多个左边字符表达式。 满足贪婪匹配
# 如果匹配未成功光标则向下移动一位再依次匹配
# print(re.findall('a+b', 'aaab ab b'))   #['aaab', 'ab']


# {m,n}  匹配m个至n(n能取到)个左边字符表达式。 满足贪婪匹配
# 如果匹配未成功光标则向下移动一位再依次匹配
# print(re.findall('a{1,4}b', 'ab aab aaab aaaab aaaaabb')) #['ab', 'aab', 'aaab', 'aaaab', 'aaaab']


# .* 贪婪匹配 从头到尾.
# print(re.findall('a.*b', 'aab abb aaab abbb aa#b')) #['aab abb aaab abbb aa#b']
# print(re.findall('a.*b', 'aab abbliye aaab abbb aa#b')) #['aab abbliye aaab abbb aa#b']
# print(re.findall('a.*b', 'ssaab abbliye aaab abbb aa#b')) #


# .*? 此时的?不是对左边的字符进行0次或者1次的匹配
# 而只是针对.*这种贪婪匹配的模式进行一种限定:告知他要遵从非贪婪匹配 推荐使用!
# 0个或者多个
# print(re.findall('a.*?b', 'aab abbliye aaab abbb aa#b')) #['aab', 'ab', 'aaab', 'ab', 'aa#b']
# print(re.findall('a.*b', 'a#bbbbbb')) #贪婪匹配
# print(re.findall('a.*?b', 'a#bbbbbb')) #非贪婪匹配



#[]：一个中括号代表一个字符
# print(re.findall('a[abc]b', 'aab abb acb adb afb a_b')) #['aab', 'abb', 'acb']
# print(re.findall('a[abc][bd]b', 'aabb aaabc acb abd acdbb')) #['aabb', 'acdb']

# - 在[]中表示范围,如果想要匹配上- 那么这个-符号不能放在中间
# print(re.findall('a[0-9]b', 'a1b a3b aeb a*b arb a_b'))  #['a1b', 'a3b']
# print(re.findall('a[a-z]b', 'a1b a3b aeb a*b arb a_b'))  #['aeb', 'arb']
# print(re.findall('a[A-Z]b', 'aAb aWb aeb a*b arb a_b'))  #['aAb', 'aWb']
# print(re.findall('a[a-zA-Z]b', 'aAb aWb aeb a*b arb a_b'))  #['aAb', 'aWb', 'aeb', 'arb']
# print(re.findall('a[0-9][0-9]b', 'a11b a12b a34b a*b arb a_b'))  #['a11b', 'a12b', 'a34b']

# - 在[]中表示范围,如果想要匹配上- 那么这个-符号不能放在中间
# print(re.findall('a[*-+]b','a-b a*b a+b a/b a6b')) #['a*b', 'a+b']   a-b匹配不出来
#当你想匹配-时 要放在[]里面的最前面 或者最后面
# print(re.findall('a[-*+]b','a-b a*b a+b a/b a6b'))  # ['a-b', 'a*b', 'a+b']
# print(re.findall('a[^a-z]b', 'acb adb a3b a*b'))  # ['a3b', 'a*b']

# ^ 在[]中的最前面表示取反的意思
# print(re.findall('a[^0-9]b','a1b a$b a5b a*b'))  #['a$b', 'a*b']
# print(re.findall('a[^a-z]b', 'acb adb a3b a*b'))  #['a3b', 'a*b']


# 练习和作业：
# s = 'alex_sb ale123_sb wu12sir_sb wusir_sb ritian_sb dab_sb 太白_nb  aaa  dsvs'
# print(re.findall('\w+_sb',s))
#结果：['alex_sb', 'ale123_sb', 'wu12sir_sb', 'wusir_sb', 'ritian_sb', 'dab_sb']


#():分组   返回括号里面的内容
# s = 'alex_sb ale123_sb wu12sir_sb wusir_sb ritian_sb dab_sb 太白_nb  aaa  dsvs'
# print(re.findall('(\w+)_sb',s)) #['alex', 'ale123', 'wu12sir', 'wusir', 'ritian', 'dab']

# 分组() 中加入?: 表示将整体匹配出来而不只是()里面的内容
#将全部的内容返回回来，而不是将组内的内容返回
# print(re.findall('compan(?:y|ies)'
# ,'Too many companies have gone bankrupt, and the next one is my company'))
#['companies', 'company']

# | 匹配 左边或者右边
# print(re.findall('alex|太白|wusir', 'alex太白wusiraleeeex太太白odlb')) #['alex', '太白', 'wusir', '太白']
# print(re.findall('company|companies'
# ,'Too many companies have gone bankrupt, and the next one is my company'))



#search：找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配，则返回None。
#找到第一个符合条件的字符串返回，返回一个对象，通过.group()
#特性：一直找，找到就返回
# ret = re.search('sb|alex', 'alex sb sb barry 日天')
# ret = re.search('sb|alex', 'sbsvslkdnhvskdvhnalexasklbvcskaldnbvalexknvk')
# print(ret.group())  #alex


#match特性：开头匹配
# match：从字符串开头开始匹配，如果以符合条件的字符串开头则返回，否则返回None 通过.group()
# ret = re.match('sb|alex', 'alexsbvslkdnhvskdvhnalexasklbvcskaldnbvalexknvk')
# print(ret.group())


#split 分割 可按照任意分割符进行分割
# s1 = 'alex;wusir,太白 吴超~宝元'
# print(re.split('[;, ~]',s1))
# ['alex', 'wusir', '日天', '太白', '女神', '肖锋', '吴超']


# sub 替换
# print(re.sub(
#     'barry', '太白', 'barry是最好的讲师，barry就是一个普通老师，请不要将barry当男神对待。'))


# compile 该函数根据包含的正则表达式的字符串创建模式对象。可以实现更有效率的匹配。
# obj = re.compile('\d{2}')
# print(obj.search('vsvd1313svsvsdv23svs').group()) #13
# print(obj.findall('vsvd1313svsvsdv23svs'))  #['13', '13', '23']


#finditer返回一个存放匹配结果的迭代器
# ret = re.finditer('\d', 'ds3sy4784a')
# print(next(ret).group()) #3
# for i in ret:
#     print(i.group())


#练习和作业：
# s1 = '''
# 时间就是1995-04-27,2005-04-27
# 1999-04-27 老男孩教育创始人
# 老男孩老师 alex 1980-04-27:1980-04-27
# 2018-12-08
# '''
#找时间
# print(re.findall('\d{4}-\d{2}-\d{2}',s1))


#匹配一个qq账号 10000开始  第一个元素规定就是非零数字，后面的是随意的数字 长度大于五位
# s2 = '164622356565623346'
# print(re.findall('[1-9][0-9]{4}',s2))

s1 = '''
<p><a style="text-decoration: underline;" href="http://www.cnblogs.com/jin-xin/articles/7459977.html" target="_blank">python基础一</a></p>
<p><a style="text-decoration: underline;" href="http://www.cnblogs.com/jin-xin/articles/7562422.html" target="_blank">python基础二</a></p>
<p><a style="text-decoration: underline;" href="https://www.cnblogs.com/jin-xin/articles/9439483.html" target="_blank">Python最详细，最深入的代码块小数据池剖析</a></p>
<p><a style="text-decoration: underline;" href="http://www.cnblogs.com/jin-xin/articles/7738630.html" target="_blank">python集合,深浅copy</a></p>
<p><a style="text-decoration: underline;" href="http://www.cnblogs.com/jin-xin/articles/8183203.html" target="_blank">python文件操作</a></p>
<h4 style="background-color: #f08080;">python函数部分</h4>
<p><a style="text-decoration: underline;" href="http://www.cnblogs.com/jin-xin/articles/8241942.html" target="_blank">python函数初识</a></p>
<p><a style="text-decoration: underline;" href="http://www.cnblogs.com/jin-xin/articles/8259929.html" target="_blank">python函数进阶</a></p>
<p><a style="text-decoration: underline;" href="http://www.cnblogs.com/jin-xin/articles/8305011.html" target="_blank">python装饰器</a></p>
<p><a style="text-decoration: underline;" href="http://www.cnblogs.com/jin-xin/articles/8423526.html" target="_blank">python迭代器,生成器</a></p>
<p><a style="text-decoration: underline;" href="http://www.cnblogs.com/jin-xin/articles/8423937.html" target="_blank">python内置函数,匿名函数</a></p>
<p><a style="text-decoration: underline;" href="http://www.cnblogs.com/jin-xin/articles/8743408.html" target="_blank">python递归函数</a></p>
<p><a style="text-decoration: underline;" href="https://www.cnblogs.com/jin-xin/articles/8743595.html" target="_blank">python二分查找算法</a></p>

'''


# 1,找到所有的p标签
# ret = re.findall('<p>.*?</p>', s1)
# print(ret)

# 2,找到所有a标签对应的url
# print(re.findall('<a.*?href="(.*?)".*?</a>',s1))
# print(re.findall('<h4.*?>',s1))
# print(re.findall('target="_blank">(.*?)</a>',s1))
# print(re.findall('href="(.*?)"',s1))
# print(re.findall('\d+',s1))

























